/* @author cerimice */
package Persistencia.Fachada;

import Persistencia.Definicion.Apartado;
import Persistencia.Definicion.Cartucho;
import Persistencia.Definicion.CierreOrdenServicio;
import Sistema.Configuracion;
import Persistencia.Definicion.Marca;
import Persistencia.Definicion.Estado;
import Persistencia.Definicion.Permiso;
import Persistencia.Definicion.Usuario;
import Persistencia.Definicion.Cliente;
import Persistencia.Definicion.EstadoOrdenServicio;
import Persistencia.Definicion.Municipio;
import Persistencia.Definicion.OrdenServicio;
import Persistencia.Definicion.TipoServicio;

import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Logger;

import javax.persistence.Query;
import javax.persistence.Persistence;
import javax.persistence.EntityManager;

public class ListaFachada
    {
    private EntityManager em;
    
    public ListaFachada()
        {}
    
    private EntityManager getEntityManager()
        {return Persistence.createEntityManagerFactory(Configuracion.getUnidadDePersistencia()).createEntityManager();}
    
    public List<Estado> listaEstado() throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("estado.lista");
                List<Estado> resultado = consulta.getResultList();
                for(Estado obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<Municipio> listaMunicipio(int estado) throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("municipio.lista");
                consulta.setParameter("estado",estado);
                List<Municipio> resultado = consulta.getResultList();
                for(Municipio obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<Marca> listaMarca() throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("marca.lista");
                List<Marca> resultado = consulta.getResultList();
                for(Marca obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<Marca> listaMarca(String valor) throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("marca.listaNombre");
                consulta.setParameter("valor", valor+"%");
                List<Marca> resultado = consulta.getResultList();
                for(Marca obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<Permiso> listaPermiso() throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("permiso.lista");
                List<Permiso> resultado = consulta.getResultList();
                for(Permiso obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<Cliente> listaCliente(int tipo,String valor) throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = null;
            switch(tipo)
                {
                case 1: consulta = em.createNamedQuery("cliente.buscarNombre"); break;
                case 2: consulta = em.createNamedQuery("cliente.buscarPaterno"); break;
                case 3: consulta = em.createNamedQuery("cliente.buscarMaterno"); break;
                }
                consulta.setParameter("valor",valor+"%");
                List<Cliente> resultado = consulta.getResultList();
                for(Cliente obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<Usuario> listaUsuario(int tipo,String valor) throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = null;
            switch(tipo)
                {
                case 1: consulta = em.createNamedQuery("usuario.buscarNombre"); break;
                case 2: consulta = em.createNamedQuery("usuario.buscarPaterno"); break;
                case 3: consulta = em.createNamedQuery("usuario.buscarMaterno"); break;
                }
                consulta.setParameter("valor",valor+"%");
                List<Usuario> resultado = consulta.getResultList();
                for(Usuario obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<TipoServicio> listaTipoServicio() throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("tipoServicio.lista");
                List<TipoServicio> resultado = consulta.getResultList();
                for(TipoServicio obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<TipoServicio> listaTipoServicio(String valor) throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("tipoServicio.listaNombre");
                consulta.setParameter("valor", valor+"%");
                List<TipoServicio> resultado = consulta.getResultList();
                for(TipoServicio obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<OrdenServicio> listaOrdenServicio(int tipo,String valor) throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = null;
            switch(tipo)
                {
                case 1: consulta = em.createNamedQuery("ordenServicio.buscarClave");    consulta.setParameter("valor","%"+valor);   break;
                case 2: consulta = em.createNamedQuery("ordenServicio.buscarCliente");  consulta.setParameter("valor",valor+"%");   break;
                case 3: consulta = em.createNamedQuery("ordenServicio.buscarUsuario");  consulta.setParameter("valor",valor+"%");   break;
                case 4: consulta = em.createNamedQuery("ordenServicio.buscarEstado");   consulta.setParameter("valor",Integer.parseInt(valor));   break;
                }
                List<OrdenServicio> resultado = consulta.getResultList();
                for(OrdenServicio obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<EstadoOrdenServicio> listaEstadoOrdenServicio() throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("estadoOrdenServicio.lista");
                List<EstadoOrdenServicio> resultado = consulta.getResultList();
                for(EstadoOrdenServicio obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<CierreOrdenServicio> listaCierreOrdenServicio(Date fechaInicio,Date fechaFinal) throws Exception
        {
        try
            {
            List<CierreOrdenServicio> lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = em.createNamedQuery("cierreOrdenServicio.listaFecha");
                consulta.setParameter("fechaInicio",fechaInicio);
                consulta.setParameter("fechaFinal",fechaFinal);
                List<CierreOrdenServicio> resultado = consulta.getResultList();
                for(CierreOrdenServicio obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<Cartucho> listaCartucho(int tipo,String valor) throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = null;
            switch(tipo)
                {
                case 1: consulta = em.createNamedQuery("cartucho.lista");                   consulta.setParameter("valor","%"+valor);   break;
                case 2: consulta = em.createNamedQuery("cartucho.listaModeloCartucho");     consulta.setParameter("valor",valor+"%");   break;
                case 3: consulta = em.createNamedQuery("cartucho.listaModeloImpresora");    consulta.setParameter("valor",valor+"%");   break;
                }
                List<Cartucho> resultado = consulta.getResultList();
                for(Cartucho obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List<Apartado> listaApartado(int tipo,String valor) throws Exception
        {
        try
            {
            List lista = new ArrayList(1);
            em = this.getEntityManager();
            Query consulta = null;
            switch(tipo)
                {
                case 1: consulta = em.createNamedQuery("apartado.lista");           consulta.setParameter("valor","%"+valor);   break;
                case 2: consulta = em.createNamedQuery("apartado.listaCliente");    consulta.setParameter("valor","%"+valor);   break;
                //case 3: consulta = em.createNamedQuery("apartado.listaModeloImpresora");    consulta.setParameter("valor",valor+"%");   break;
                }
                List<Apartado> resultado = consulta.getResultList();
                for(Apartado obj:resultado){lista.add(obj);}
            return lista;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    }
